/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package gestionedt.groupes;

import gestionedt.controllers.GroupeJpaController;
import gestionedt.controllers.ModuleJpaController;
import gestionedt.models.Creneau;
import gestionedt.models.Groupe;
import gestionedt.models.Module;
import gestionedt.models.Prestation;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.actions.DispatchAction;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMessages;

/**
 *
 */
public class GroupesAction extends DispatchAction {
    
    /**
     * Liste tous les groupes.
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws java.lang.Exception
     */
    public ActionForward lister(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        GroupesForm gForm = (GroupesForm) form;
        GroupeJpaController ct = new GroupeJpaController();
        gForm.setGroupes(ct.getList());

        return mapping.findForward("liste");
    }

    /**
     * Affiche le formulaire d'ajout d'un nv groupe.
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws java.lang.Exception
     */
    public ActionForward afficherNv(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        return mapping.findForward("formGroupe");
    }

    /**
     * Affiche le formulaire de modification d'un groupe existant.
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws java.lang.Exception
     */
    public ActionForward afficher(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        GroupesForm gForm = (GroupesForm) form;
        int idGroupe = gForm.getIdGroupe();
        GroupeJpaController ctGroupe = new GroupeJpaController();
        Groupe groupe = ctGroupe.findGroupeAvecRel(idGroupe);
        gForm.setGroupe(groupe);

        String[] numsIndispo = new String[groupe.getIndisponibilites().size()];
        int i = 0;
        for(Creneau c : groupe.getIndisponibilites())
            numsIndispo[i++] = c.getNumero().toString();
        gForm.setNumsIndispo(numsIndispo);

        // chargement des modules pour remplir la liste déroulante
        ModuleJpaController ctModule = new ModuleJpaController();
        gForm.setModules(ctModule.getList());

        return mapping.findForward("formGroupe");
    }

    /**
     * Supprime un groupe.
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws java.lang.Exception
     */
    public ActionForward supprimer(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        GroupesForm gForm = (GroupesForm) form;
        int idGroupe = gForm.getIdGroupe();
        GroupeJpaController ctGroupe = new GroupeJpaController();
        ctGroupe.destroy(idGroupe);

        return mapping.findForward("lister");
    }

    /**
     * Inscrit le groupe à un module donné.
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws java.lang.Exception
     */
    public ActionForward inscrireGrp(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        GroupesForm gForm = (GroupesForm) form;
        ActionMessages erreurs = gForm.validateInscripGroupe(mapping, request);
        if( ! erreurs.isEmpty()) {
            this.saveMessages(request, erreurs);
            return afficher(mapping, form, request, response);
        }

        ModuleJpaController ctModule = new ModuleJpaController();
        GroupeJpaController ctGroupe = new GroupeJpaController();

        Module module = ctModule.findModule(gForm.getIdIntModuleSel());
        Groupe groupe = ctGroupe.findGroupe(gForm.getIdGroupe());

        // si le groupe n'est pas déjà inscrit :
        if( ! module.getGroupesInscrits().contains(groupe)) {
            module.getGroupesInscrits().add(groupe);
            ctModule.edit(module);
        }

        return afficher(mapping, form, request, response);
    }

    /**
     * Désinscrit le groupe du module donné.
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws java.lang.Exception
     */
    public ActionForward desinscrireGrp(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        GroupesForm gForm = (GroupesForm) form;

        ModuleJpaController ctModule = new ModuleJpaController();
        GroupeJpaController ctGroupe = new GroupeJpaController();

        Module module = ctModule.findModule(gForm.getIdModule());
        Groupe groupe = ctGroupe.findGroupe(gForm.getIdGroupe());

        module.getGroupesInscrits().remove(groupe);
        for(Prestation prest : module.getPrestations())
            prest.getGroupes().remove(groupe);
        ctModule.edit(module);

        return afficher(mapping, form, request, response);
    }

}